package net.usys.service;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import net.usys.bean.Pager;
import net.usys.entity.Auction;
import net.usys.entity.Member;
import net.usys.entity.Product;

/**
 * Service接口 - 商品
 * ============================================================================
 
 * ----------------------------------------------------------------------------
 * KEY: SHOPXX62F330D4576F1CE472FE4A72A3C1070A
 * ============================================================================
 */

public interface AuctionService extends BaseService<Auction, String> {


	/**
	 * 根据起始结果数、最大结果数，获取所有商品（只包含isMarketable=true的对象）
	 * 
	 * @param firstResult
	 *            起始结果数
	 * 
	 * @param maxResults
	 *            最大结果数
	 * 
	 * @return 此分类下的所有商品集合
	 */
	public List<Auction> getAuctionList(int firstResult, int maxResults);

	/**
	 * 根据起始日期、结束日期、起始结果数、最大结果数，获取商品集合（只包含isMarketable=true的对象）
	 * 
	 * @param beginDate
	 *            起始日期
	 * 
	 * @param endDate
	 *            结束日期
	 * 
	 * @param firstResult
	 *            起始结果数
	 * 
	 * @param maxResults
	 *            最大结果数
	 * 
	 * @return 此分类下的所有商品集合
	 */
	public List<Auction> getAuctionList(Date beginDate, Date endDate, int firstResult, int maxResults);
	

	/**
	 * 根据最大返回数获取所有精品商品(只包含isMarketable=true的对象，不限分类)
	 * 
	 * @param maxResults
	 *            最大返回数
	 * 
	 * @return 所有精品商品集合
	 */
	public List<Auction> getBestAuctionList(int maxResults);
	
	
	/**
	 * 根据最大返回数获取所有精品商品(只包含isMarketable=true的对象，不限分类)
	 * 
	 * @param product
	 *            竞价产品
	 * 
	 * @return 所有竞价集合
	 */
	public List<Auction> getAuctionAuctionList(Auction product);

	
	/**
	 * 根据最大返回数获取所有热卖商品(只包含isMarketable=true的对象，不限分类)
	 * 
	 * @param maxResults
	 *            最大返回数
	 * 
	 * @return 所有热卖商品集合
	 */
	public List<Auction> getHotAuctionList(int maxResults);


	/**
	 * 根据最大返回数获取最新商品(只包含isMarketable=true的对象，不限分类)
	 * 
	 * @param maxResults
	 *            最大返回数
	 * 
	 * @return 最新商品集合
	 */
	public List<Auction> getNewAuctionList(int maxResults);

	
	/**
	 * 根据分页对象搜索文章
	 * 
	 * @return 分页对象
	 */
	public Pager search(Pager pager);
	
	/**
	 * 根据Member、Pager获取收藏商品分页对象
	 * 
	 * @param member
	 *            Member对象
	 *            
	 * @return 收藏商品分页对象
	 */
	public Pager getFavoriteAuctionPager(Member member, Pager pager);
	
	/**
	 * 获取商品库存报警数
	 *            
	 * @return 商品库存报警数
	 */
	public Long getStoreAlertCount();
	
	/**
	 * 获取已上架商品数
	 *            
	 * @return 已上架商品数
	 */
	public Long getMarketableAuctionCount();
	
	/**
	 * 获取已下架商品数
	 *            
	 * @return 已下架商品数
	 */
	public Long getUnMarketableAuctionCount();
	
	
	public Auction getMaxAuctionPrice(String productid);

}